package onjava8.char24;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.IntStream;

/**
 * @author study
 * @version 1.0
 * @date 2021/1/7 9:54
 */
public class SingleThreadExecutor3 {
    public static void main(String[] args) throws InterruptedException {
        ExecutorService exec = Executors.newSingleThreadExecutor();
        /**
         * 尽管InterferingTask  缺乏线程安全。SingleThreadExecutor 的主要好处
         *  一次运行一个任务，这些任务不会相互干扰，因此增强了线程的安全性,这种现象称为线程封闭
         *  因为在单线程上运行任务限制了他们的影响，线程封闭限制了加速，但可以节省很多困难的调试和重写。
         */
        IntStream.range(0, 10)
                .mapToObj(InterferingTask::new)
                .forEach(exec::execute);
        exec.shutdown();
    }
}
